#include<iostream>
#include<unistd.h>
#include<signal.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<stdio.h>
#include<stdlib.h>

using namespace std;

int main()
{
    pid_t id=fork();
    if(id==0)
    {
        int cnt=50;
        //子进程
        while(cnt--)
        {
            cout<<"I am a child process,pid:"<<getpid()<<endl;
            sleep(1);
        }
        exit(2);
    }
    int status=0;
    pid_t rid=waitpid(id,&status,0);
    if(rid==id)
    {
        cout<<"child quit info,rid:"<<rid<<"exit code:"<<
        ((status>>8)&0xFF)<<"exit signal:"<<(status&0x7F)<<
        "core dump:"<<((status>>7)&1)<<endl;
    }
}
// void handler(int signo)
// {
//     cout<<"...get a sig,number:"<<signo<<endl;
//     int n=alarm(5);//重复设置闹钟
//     cout<<"剩余时间："<<n<<endl;
// }
// int main()
// {
//     signal(SIGALRM,handler);//信号捕获
//     int n=alarm(50);
//     while(1)
//     {
//         cout<<"proc is running...,pid: "<<getpid()<<endl;
//         sleep(1);
//     }
//     return 0;
// }
// void work()
// {
//     cout<<"print log..."<<endl;
// }

// void handler(int signo)
// {
//     work();
//     cout<<"...get a sig,number:"<<signo<<endl;
// }
// int main()
// {
//     //signal(SIGSEGV,handler);
//     // signal(SIGFPE,handler);
//      signal(SIGPIPE,handler);
//     cout<<"point error before"<<endl;
//     sleep(3);
//     //int *p=nullptr;
//     //*p=100;
//     //int a=10;
//     //a/=0;
//     // char buffer[1024];
//     // write(7,buffer,sizeof(buffer));
//     // perror("write");
//      cout<<"point error after"<<endl;
//     return 0;
// }